{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SVM Regression\n",
    "\n",
    "This function shows how to use TensorFlow to solve support vector regression. We are going\n",
    "to find the line that has the maximum margin which INCLUDES as many points as possible.\n",
    "\n",
    "We will use the iris data, specifically:\n",
    "\n",
    "$y =$ Sepal Length\n",
    "\n",
    "$x =$ Pedal Width\n",
    "\n",
    "To start, load the necessary libraries:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.6/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets\n",
    "from tensorflow.python.framework import ops\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a TF Graph Session:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Load the iris data, use the Sepal Length and Petal width for SVM regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the data\n",
    "# iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)]\n",
    "iris = datasets.load_iris()\n",
    "x_vals = np.array([x[3] for x in iris.data])\n",
    "y_vals = np.array([y[0] for y in iris.data])\n",
    "\n",
    "# Split data into train/test sets\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Declare the batch size, initialize placeholders, and create linear regression variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 50\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for linear regression\n",
    "A = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1,1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare model operations\n",
    "model_output = tf.add(tf.matmul(x_data, A), b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our loss function, which maximizes the amount of points near the line."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare loss function\n",
    "# = max(0, abs(target - predicted) + epsilon)\n",
    "# 1/2 margin width parameter = epsilon\n",
    "epsilon = tf.constant([0.5])\n",
    "# Margin term in loss\n",
    "loss = tf.reduce_mean(tf.maximum(0., tf.subtract(tf.abs(tf.subtract(model_output, y_target)), epsilon)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " Create the optimization function and initialize all the model variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.075)\n",
    "train_step = my_opt.minimize(loss)\n",
    "\n",
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Train!  Loop through batches of data and optimize."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------\n",
      "Generation: 50\n",
      "A = [[2.0217047]] b = [[3.13095]]\n",
      "Train Loss = 0.4659181\n",
      "Test Loss = 0.3565919\n",
      "-----------\n",
      "Generation: 100\n",
      "A = [[1.4679046]] b = [[3.99345]]\n",
      "Train Loss = 0.18255936\n",
      "Test Loss = 0.10311597\n",
      "-----------\n",
      "Generation: 150\n",
      "A = [[1.1589043]] b = [[4.4314494]]\n",
      "Train Loss = 0.10085409\n",
      "Test Loss = 0.06533866\n",
      "-----------\n",
      "Generation: 200\n",
      "A = [[1.0203044]] b = [[4.633951]]\n",
      "Train Loss = 0.08440649\n",
      "Test Loss = 0.06800141\n"
     ]
    }
   ],
   "source": [
    "# Training loop\n",
    "train_loss = []\n",
    "test_loss = []\n",
    "for i in range(200):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = np.transpose([x_vals_train[rand_index]])\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    \n",
    "    temp_train_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_train]), y_target: np.transpose([y_vals_train])})\n",
    "    train_loss.append(temp_train_loss)\n",
    "    \n",
    "    temp_test_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_test]), y_target: np.transpose([y_vals_test])})\n",
    "    test_loss.append(temp_test_loss)\n",
    "    if (i+1)%50==0:\n",
    "        print('-----------')\n",
    "        print('Generation: ' + str(i+1))\n",
    "        print('A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b)))\n",
    "        print('Train Loss = ' + str(temp_train_loss))\n",
    "        print('Test Loss = ' + str(temp_test_loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For plotting, we need to extract the coefficients and get the best fit line. (Also the upper and lower margins.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Extract Coefficients\n",
    "[[slope]] = sess.run(A)\n",
    "[[y_intercept]] = sess.run(b)\n",
    "[width] = sess.run(epsilon)\n",
    "\n",
    "# Get best fit line\n",
    "best_fit = []\n",
    "best_fit_upper = []\n",
    "best_fit_lower = []\n",
    "for i in x_vals:\n",
    "  best_fit.append(slope*i+y_intercept)\n",
    "  best_fit_upper.append(slope*i+y_intercept+width)\n",
    "  best_fit_lower.append(slope*i+y_intercept-width)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Matplotlib code to plot the fit and loss."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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FNLT0xk9ejTnnXcebdq04eWXXwYgIyOD2267jRYtWnDxxRfTv3//rItpo0aNuOeee2jfvj1Tpkxh8+bN9OvXjw4dOtCjRw/WrVsHwJQpU0hOTqZt27ZccMEFAKxevZpOnTqRkpJCmzZt2LhxI3Am3bWqMnr06Kw01pnn5ysNdiC2bduWdac0YcIEBg0aRL9+/WjatCl333131npffvklXbt2pX379gwdOpSjR48GtP+gqGrc/3To0EGNSSRr1qw58wIi9+PDkSNHtG3bttq0aVO99dZbddasWVnvjRs3Tv/4xz+qquqCBQs0+//Phg0b6rp167Rr166qqpqSkqKrV6/WVq1a5TnG1q1bs5anpqZqr169dMWKFaqq+vLLL+s//vEPVVU9ceKEdujQQbds2aJTpkzRSy+9VNPT03XPnj1auXJlnTJlStaxn3jiiaz99+nTRzds2KCqqgsXLtTevXurqmpycrLu3LlTVVV//fVXVVW9/fbb9a233lJV1ZMnT+rx48dVVbVcuXKqqvree+/pRRddpKdPn9affvpJ69evr7t379aZM2dqxYoVdceOHZqenq5dunTROXPm5DnX66+/Pquc3s7/tdde08aNG+vBgwc1NTVVGzRooNu3b9d9+/Zpjx499OjRo6qqOnbsWH344Ye9fmc5/mY8gMUawDXWcg0ZY/IoX748S5YsYc6cOcycOZNhw4YxduxYRo0axbBhw+jWrRtPP/10nmYhgGrVqlGlShXeffddzj33XMqWLevzOJs3byYlJYWtW7dy2WWX0aZNG8DVgn/44Yes2v6hQ4fYuHEjc+fOZejQoRQrVozatWvTu3fvHPsbNmwYAEePHmX+/PkMHTo0672TJ08C0L17d0aNGsVVV13FoEGDAOjatSuPPfYYO3fuZNCgQTRt2jTHfufOncuIESNISkqiVq1a9OzZk++//56KFStmpcEGstJgn3/++UF/5hdeeCGVKlUCoGXLlvz4448cPHiQNWvW0L17dwBOnTpF165dg963PxYIjIl3McoHlpSURK9evejVqxetW7fm9ddfZ9SoUdSvX5/GjRsze/Zs3n//fRYsWJBn22HDhvGHP/yBCRMm5HuMzD6C/fv30717d6ZNm8YVV1yBqvLCCy/Qt2/fHOt/9tln+e4vM6ldRkYGlStX9pra+qWXXmLRokV8+umndOjQ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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4YV88cUXZ5x38ODBbNq0iQ8//JA5c+bQtWtX1qxZw7x58/yPAY4cOcIPP/xAgwYNSh374sWLmTVrFgC33HILv//97wHo06cPt9xyCzfeeCPDhg0D4KKLLuIPf/gDW7duZdiwYSQlJZX6ekUJqzuaExMTi60PNMaUzNl+ow+W6tWr+9c3bNjA3/72N7755htq167NL37xiwL77sfExPjXIyMjycnJKfDcdevW5eabb+bmm29m0KBBfPnll6gqv/vd77jjjjtOO3bjxo3l9BvBv/71L3/C6NatG8uXL2fEiBH07t2bDz74gEGDBjFx4kQuvfTScrtm+Ix9lJ7Ozw8e5MSWLfh8vlBHY4wJoszMTOLi4qhZsyYZGRnMnTv3rM+1YMECjh8/7j9vWloazZs358orr+SVV17h6NGjgLvbe+/evcTFxXH48OFSXaNXr168/fbbALzxxhv+D/nNmzfTq1cvnn76aS644AJ27NjB5s2bSUpK4te//jVXX311uX/RDZ+SQloa182fzz+AXbt20bhx41BHZIwJkm7dutGhQwfatWtHixYt6NOnz1mfa8mSJdx3331ER0fj8/m4++676dq1K127dmXdunX06uUGaoiLi+Ott94iISGBCy+8kM6dOzNkyBDGjh172vkyMzNPa7h++OGHefnll7n99tt59tlnadiwob+H1AMPPEBaWhqqysCBA+nUqRN/+MMfmDJlCtHR0TRu3JgnnnjirH+3gpxzczSnpqbqWU2yk5YGLVsyErjzyy/L9EdiTLhau3Yt7du3D3UYphgFvU8i8q2qphbyFL/wqT7ySgZNwRqbjTGmEOGTFKpUQRs0oBl2r4IxxhQmfJICIM2a0apKFSspGGNMIcIqKfDee4xNTrakYIwxhQivpNCsGQ1at7akYIwxhQivpLBsGaO2bGHvtm2F3qRijDHhLLySwvff0/err2js8/kHnDLGnDvKY+hsgIkTJ7Jr164C9y1cuJCePXuSkpJC+/btefrpp4s817Jly/jwww8L3Dd//nx+8pOflDiuyiB8bl4D8G4YyeuWmjdyqjHm3FCSobNLYuLEiXTr1o1GjRqdse/WW2/l/fffp1OnTuTm5hY798KyZctYvXo1gwYNKnUclVF4lRTyJQVjzPnjtddeo0ePHqSkpHDPPffg8/nIyclhxIgRdO7cmU6dOvH3v/+d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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot fit with data\n",
    "plt.plot(x_vals, y_vals, 'o', label='Data Points')\n",
    "plt.plot(x_vals, best_fit, 'r-', label='SVM Regression Line', linewidth=3)\n",
    "plt.plot(x_vals, best_fit_upper, 'r--', linewidth=2)\n",
    "plt.plot(x_vals, best_fit_lower, 'r--', linewidth=2)\n",
    "plt.ylim([0, 10])\n",
    "plt.legend(loc='lower right')\n",
    "plt.title('Sepal Length vs Pedal Width')\n",
    "plt.xlabel('Pedal Width')\n",
    "plt.ylabel('Sepal Length')\n",
    "plt.show()\n",
    "\n",
    "# Plot loss over time\n",
    "plt.plot(train_loss, 'k-', label='Train Set Loss')\n",
    "plt.plot(test_loss, 'r--', label='Test Set Loss')\n",
    "plt.title('L2 Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('L2 Loss')\n",
    "plt.legend(loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
